<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
            4. Promise.resolve方法：Promise.resolve(value)
                说明: 用于快速返回一个状态为fulfilled或者rejected的Promise实例对象
                注意: 这个resolve是直接通过Promise类本身调用，不是通过executor函数哦
                备注：value的值有两种情况:(1)非promise实例  (2)promise实例
                          问题来了，如果value是非promise实例，那肯定返回的是一个成功的promise实例。但是如果value是一个失败的promise实例，则返回的也会是一个失败的promise实例。这里可能是设计者没有考虑到的bug，真实的开发中也不会这么去写，了解一下就好，防止以后有面试官为难你

            5. Promise.reject方法：Promise.reject(err)
                说明：有成功的就有失败的，所以我们也有一个快速返回一个状态为rejected状态的Promise实例对象方法
                注意：这个reject方法也是通过Promise类本身调用，而不是executor函数
                备注：不同于上面了，无论value是什么值，返回的都是一个失败的promise实例

            怎么样，是不是觉着当value为promise实例的时候，返回的结果这一块儿有点难以理解？这个有可能是设计者考虑不周导致的，所以也不用太过在意。真实的开发中一般也不会这么写
        */

        // 示例演示，当value和总的都是成功的promise实例
        let p1 = Promise.resolve(100)
        let p2 = Promise.resolve(p1)
        p2.then((val)=>{console.log('success',val);},(err)=>{console.log('failed',err);})

        // 示例演示，当value为失败的promise实例但是总的是成功的promise实例
        let p3 = Promise.reject(100)
        let p4 = Promise.resolve(p3)
        p4.then((val)=>{console.log('success',val);},(err)=>{console.log('failed',err);})

        // 示例演示，当value为成功的promise实例但是总的为失败的promise实例
        let p5 = Promise.resolve(100)
        let p6 = Promise.reject(p5)
        p6.then((val)=>{console.log('success',val);},(err)=>{console.log('failed',err);})

        // 示例演示，当value和总的都是失败的promise实例
        let p7 = Promise.reject(100)
        let p8 = Promise.reject(p7)
        p8.then((val)=>{console.log('success',val);},(err)=>{console.log('failed',err);})
    </script>
</body>
</html>